package desmontec.documentos

import grails.test.*
import desmontec.documentos.DPG
import desmontec.funcionarios.Engenheiro
import desmontec.documentos.QuantidadeMaximaDeMateriais

class DPGTests extends GrailsUnitTestCase {
	
	def dpg = new DPG()
	def quantidadeMaximaDeMateriais = new QuantidadeMaximaDeMateriais()
	
    protected void setUp() {
        super.setUp()
		mockForConstraintsTests(DPG, [ dpg ])
		mockForConstraintsTests(QuantidadeMaximaDeMateriais, [ quantidadeMaximaDeMateriais ])
    }

    protected void tearDown() {
        super.tearDown()
    }

	/**
	 * Testa se os campos de uma DPG sao nulos 
	 */
	void testDPGParametrosNull() {
		
		def nullableDpg = new DPG(numero:123, beneficiario:null, responsavel:null,inicioDoPrazoValidade:null, fimDoPrazoValidade:null )
		
		assertFalse(nullableDpg.validate())
		
		assertEquals "nullable", nullableDpg.errors["responsavel"]
		assertEquals "nullable", nullableDpg.errors["inicioDoPrazoValidade"]
		assertEquals "nullable", nullableDpg.errors["fimDoPrazoValidade"]
		assertEquals "nullable", nullableDpg.errors["beneficiario"]
	}
	
	/**
	 * Testa se o campo baneficiario excedeu o limite maximo definido
	 */
	void testDPGTamanhoCampoBeneficiario() {
		def engenheiro = new Engenheiro(nome: "Arthur", numeroCREA: "8000")
		def dataInicio = new Date()
		def dataFim = new Date()
		
		def dpgAux = new DPG(numero:123, beneficiario:"DPG da Indutria de nome estremamente grande LTDA DPG da Indutria de nome estremamente grande LTDA DPG da Indutria de nome estremamente grande LTDA DPG da Indutria de nome estremamente grande LTDA DPG da Indutria de nome estremamente grande LTDA DPG da Indutria de nome estremamente grande LTDA"
			, responsavel:engenheiro,inicioDoPrazoValidade:dataInicio, fimDoPrazoValidade:dataFim )
		
		assertFalse(dpgAux.validate())
		
		assertEquals "size", dpgAux.errors["beneficiario"]
	}
	
	/**
	 * Testa se o campo numero de uma DPG eh unico
	 */
	void testNumeroDPGValorUnico(){
		
		def dpg1 = new DPG(numero:1234, beneficiario:"DPG Correta", responsavel:null,inicioDoPrazoValidade:null, fimDoPrazoValidade:null )	
		mockForConstraintsTests(DPG, [ dpg1 ])
		
		def engenheiro = new Engenheiro(nome: "Arthur", numeroCREA: "8000")
		def dataInicio = new Date()
		def dataFim = new Date()
		
		def dpg2 = new DPG(numero:1234, beneficiario:"trunks", responsavel:engenheiro,inicioDoPrazoValidade:dataInicio, fimDoPrazoValidade:dataFim )
		
		assertFalse(dpg2.validate())
		
		assertEquals "unique", dpg2.errors["numero"]
	}
	
	/**
	 * Testa se o prazo final de validade eh maior que o prazo inicial da validade de uma DPG
	 */
	void testDPGInicioFimPrazoValidade(){
		
		def engenheiro = new Engenheiro(nome: "Arthur", numeroCREA: "8000")
		Date inicioPrazo = GregorianCalendar.getInstance().getTime();
		Date fimPrazo = GregorianCalendar.getInstance().getTime().previous();
		
		def dpg1 = new DPG(numero:1234, beneficiario:"DPG Correta", responsavel:engenheiro,
			inicioDoPrazoValidade:inicioPrazo, fimDoPrazoValidade:fimPrazo )
		
		assertFalse(dpg1.validate())
		assertEquals "desmontec.documentos.DPG.prazoValidade.erro", dpg1.errors["fimDoPrazoValidade"]
		
	}
	
}
